package com.csii.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ListFileServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取上传文件目录
        String uploadFilePath = this.getServletContext().getRealPath("/WEB-INF/upload");
        //存储要下载的文件名
        Map<String,String> fileNameMap = new HashMap<String, String>();
        //递归遍历uploadFilePath目录下的所有文件和目录,将文件的文件名存储到Map集合中
        listFile( new File(uploadFilePath),fileNameMap);//File既可以代表一个文件,也可以代表一个目录
        //将Map集合发送到listFile.jsp页面中显示
        request.setAttribute("fileNameMap",fileNameMap);
        request.getRequestDispatcher("/listFile.jsp").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }


    protected void listFile(File file,Map<String,String> fileNameMap){
        if (! file.isFile()){
            //file是一个目录,继续解析,直到根目录
            //列出该目录下所有的子目录和文件
            File files[] = file.listFiles();
            //遍历数组
            for (File fileRoot: files) {
                //递归
                listFile(fileRoot,fileNameMap);
            }
        }else {
            //file是一个文件
            //文件名格式:UUID_真实文件名
            String realFileName = file.getName().substring(file.getName().indexOf("_")+1);
            //file.getName() 具有唯一性
            fileNameMap.put(file.getName(),realFileName);
        }

    }
}
